from DaySix.chatAiConfig import chatAiConfigInit, chatAiConfigGet
from DaySix.chatAiGetInput import getUserInput
from DaySix.chatAiLog import chatAiLog, chatAiLogInit, chatAiLogEnable
from DaySix.chatAiPost import chatAiPost
from DaySix.chatAiStore import chatAiDbInit, chatAiAdd


class chatBot:
    def __init__(self):
        # 配置模块初始化
        chatAiConfigInit('./chatAi.ini')

        # 日志模块初始化
        log_file = chatAiConfigGet('log_file')
        chatAiLogInit(log_file)
        chatAiLog('INFO', f'日志模块初始化完成，路径:{log_file}')

        # 控制台日志开关
        chatAiLogEnable(chatAiConfigGet('log_console').lower() == 'true')
        chatAiLog('INFO', f'控制台日志状态:{chatAiConfigGet("log_console")}')

        # 存储模块初始化
        chatAiDbInit(chatAiConfigGet('log_db'))
        chatAiLog('INFO', f'存储模块初始化完成，路径:{chatAiConfigGet("log_db")}')

        # 初始化对话历史
        self.history = []
        self.chat_his = int(chatAiConfigGet('chat_his'))
        chatAiLog('INFO', f'历史对话轮数配置:{self.chat_his}')

    def run(self):
        while True:
            # 获取用户输入
            user_input = getUserInput(chatAiConfigGet('banner'))
            if user_input.lower() == 'exit':
                chatAiLog('INFO', '用户退出会话')
                break

            # 添加用户对话记录
            chatAiAdd('user', user_input)
            self.history.append({"role": "user", "content": user_input})
            chatAiLog('INFO', f'用户输入已存储:{user_input}')

            # 构建请求数据（带历史记录）
            data = self.history[-self.chat_his * 2:] if self.chat_his > 0 else []
            chatAiLog('DEBUG', f'请求数据体:{data}')

            # 发起AI请求
            chatAiPost(
                url=chatAiConfigGet('fast_url'),
                key=chatAiConfigGet('fast_key'),
                data=data,
                OnDataProcess=self._stream_callback,
                OnDataFinish=self._finish_callback
            )

    def _stream_callback(self, data):
        """流式响应回调"""
        print(data, end='', flush=True)
        chatAiLog('DEBUG', f'流式响应数据:{data}')

    def _finish_callback(self, data):
        """完成回调"""
        print()  # 换行操作
        chatAiAdd('assistant', data)
        self.history.append({"role": "assistant", "content": data})
        chatAiLog('INFO', f'AI响应已存储:{data}')


if __name__ == "__main__":
    bot = chatBot()
    bot.run()